package com.akino.gulimall.order;

import com.alibaba.cloud.seata.GlobalTransactionAutoConfiguration;
import org.springframework.amqp.rabbit.annotation.EnableRabbit;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;


/**
 * 使用RabbitMQ：
 * 1.引入amqp场景；RabbitAutoConfiguration自动生效
 * 2.给容器中自动配置了：
 *      RabbitTemplate、AmqpAdmin、CachingConnectionFactory、RabbitMessagingTemplate
 *      所有的配置在：
 *      @ConfigurationProperties(prefix = "spring.rabbitmq")
 *      public class RabbitProperties
 * 3.给配置文件中配置 spring.rabbitmq 信息
 * 4.开启@EnableRabbit
 * 5.监听消息：
 *      @RabbitListener（类+方法） -> 监听哪些消息队列
 *          Queue：1.订单服务启动多个；同一个消息，只能有一个客户端受到
 *                 2.只有一个消息完全处理完，方法运行结果，就可以接受到下一个消息
 *      @EabbitHandler（仅限方法） -> 重载区分不同的消息
 */
@EnableAspectJAutoProxy(exposeProxy = true)  // 开启 aspectj 动态代理
@EnableFeignClients
@EnableRedisHttpSession
@EnableRabbit
@EnableDiscoveryClient
@SpringBootApplication(exclude = GlobalTransactionAutoConfiguration.class)
public class GulimallOrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(GulimallOrderApplication.class, args);
    }

}
